{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 问题描述\n",
    "1. 画图解释图像卷积滤波的基本原理，并进一步简述常见的图像平滑滤波算法。 \n",
    "2. 简述边缘检测的基本原理，以及Sobel、LoG和Canny算子的原理差异。 \n",
    "3. 简述图像直方图的基本概念，及使用大津算法进行图像分割的基本原理。 \n",
    "4. 简述Harris算子对角点的定义，进行角点检测的基本原理，并说明引入角点响应函数的意义。 \n",
    "5. 简述Hough变换的基本原理(包括参数空间变换及参数空间划分网格统计)。 \n",
    "6. 简述SIFT原理(重点是尺度空间和方向直方图原理)及ORB算子原理(重点是FAST和BRIEF)。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. 画图解释图像卷积滤波的基本原理，并进一步简述常见的图像平滑滤波算法。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![avatar](./img/卷积滤波.png)\n",
    "`图像卷积滤波的基本原理`:对于图像的每一个像素点，计算它的邻域像素和滤波器矩阵的对应元素的乘积，然后加起来，作为该像素位置的值。这样就完成了滤波过程。<br>\n",
    "`常见的图像平滑滤波算法`:\n",
    "(1)平均滤波(简单平滑):对图像中一定邻域内的像素灰度求平均值，将平均的结果作为中心像素的灰度保存在结果图中，这样就可以在一定程度上把噪声点的影响分担到领域各像素中，减小了噪声对图像的影响，但是会让图像变得模糊。<br>\n",
    "(2)加权平均滤波(高斯平滑):与平均滤波不同的是，它在对领域内像素灰度进行平均时，给予了不同位置的像素不同的权值。模板越靠近邻域中心位置，其权值越高。在图像细节进行模糊时，可以更多的保留图像总体的灰度分布特征。但是高斯平滑对高对比度图像的平滑效率较低，在离散型噪声的消除方面，高斯平滑的效果并不理想。<br>\n",
    "(3)中值滤波:一种非线性的图像处理方法，通过对采样窗口内的奇数个像素的灰度数值进行排序，并取出序列中位于中间位置的灰度作为中心像素的灰度。中值滤波对椒盐噪声非常有效。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 简述边缘检测的基本原理，以及Sobel、LoG和Canny算子的原理差异。  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`边缘检测`:边缘检测的算法通常通过对领域内像素灰度求一阶导数、二阶导数及梯度来实现，这些计算经过化简的结果称为算子。边缘检测的结果通常用灰度图或二值图表示，原图像中的边缘部分用用灰度较高的像素显示，而没有边缘的部分在灰度图中显示为黑色或灰色。边缘检测结果图中的灰度值可以直接通过算子计算原图像中对应像素的灰度差分来得到。几乎所有边缘检测的共同思想都是以像素灰度差分为基础的。在实现时，只需依次对原图像的每个像素进行运算，并把结果保存为灰度图中的像素即可。在计算时，由于灰度差分的结果通常比较小，直接转换为灰度图会使检测结果模糊，可以使用阈值因子对差分结果进行缩放，从而得到清晰的边缘图像。<br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`Sobel算子`\n",
    "![avatar](./img/sobel.png)\n",
    "Sobel算子包含两组3x3的矩阵，分别为横向及纵向模板，将之与图像作平面卷积，即可分别得出横向及纵向的灰度差分近似值。实际使用中，常用上面两个模板来检测图像边缘。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`LoG算子`\n",
    "![avatar](./img/LoG.png)\n",
    "3x3邻域的检测模板覆盖像素少，运算量相对较小，不足之处是检测精度低，得到的边缘线条不规整。特别的，对于拉普拉斯算子而言，它对噪声是非常敏感的，因此我们很容易想到在利用其进行边缘检测之前先用高斯模板进行平滑处理，再做拉普拉斯检测，这样就得到了上图的高斯拉普拉斯算子（LoG）。任意尺寸的卷积核模板都可以由前面给定的LoG算子的表达式计算给出。但在这个过程中应该确保模板中所有元素的和等于零，如此一来，一个同性质区域的卷积结果也会总保持为零。<br>\n",
    "借助LoG算子，图像的边缘可以通过如下步骤获取:<br>\n",
    "* 应用LoG算子处理图像。\n",
    "* 检测图像的零交叉点。\n",
    "* 筛选掉那些不满足条件的点（例如可以通过设定阈值的方法进行过滤）。<br>\n",
    "最后一步处理旨在压制那些弱的零交叉点，因为这些点更可能是由噪声引起的。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`Canny算子`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "已有方法的问题:噪声；断裂；虚检(渐变灰度)。Canny算子核心优点:边缘可自动连通。<br>\n",
    "算法步骤:<br>\n",
    "* 平滑图像同时计算微分；\n",
    "* 计算梯度(幅值和方向)；\n",
    "* 梯度幅值进行非极大值抑制；\n",
    "* 自动边缘连接。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![avatar](./img/Canny01.png)\n",
    "![avatar](./img/Canny02_1.png)\n",
    "![avatar](./img/Canny02_2.png)\n",
    "![avatar](./img/Canny03.png)\n",
    "![avatar](./img/Canny04.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. 简述图像直方图的基本概念，及使用大津算法进行图像分割的基本原理。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`图像直方图的概念`:灰度直方图是一个二维的统计图表。从数学上来说，它描绘了图像各灰度值的统计特性，显示了各个灰度值出现的次数或概率。从图形上来说，横坐标表示图像的灰度值，取值范围是0～255，纵坐标则通过高度来表示出现次数的多少或者概率的高低。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`大津算法`\n",
    "![avatar](./img/大津算法.png)\n",
    "* 遍历所有灰度后，计算并取最大g值所对应的灰度作为最佳阈值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. 简述Harris算子对角点的定义，进行角点检测的基本原理，并说明引入角点响应函数的意义。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`Harris算子原理`\n",
    "* 在灰度变化平缓区域，窗口内像素灰度积分近似保持不变；\n",
    "* 在边缘区域、边缘方向:灰度积分近似不变，其余任意方向剧烈变化；\n",
    "* 在角点处，任意方向均剧烈变化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![avatar](./img/Harris1.png)\n",
    "![avatar](./img/Harris2.png)\n",
    "![avatar](./img/Harris3.png)\n",
    "![avatar](./img/Harris4.png)\n",
    "* $\\lambda_{1}^{-1/2}$和$\\lambda_{2}^{-1/2}$是椭圆的长短轴<br>\n",
    "    当$\\lambda_{1}$, $\\lambda_{2}$都比较小时，点（x,y）处于灰度变化平缓区域；<br>\n",
    "    当$\\lambda_{1}>>\\lambda_{2}$或者$\\lambda_{1}<<\\lambda_{2}$时，点(x,y)为边界像素；<br>\n",
    "    当$\\lambda_{1}$, $\\lambda_{2}$都比较大，且近似相等时，点(x,y)为角点。\n",
    "![avatar](./img/Harris5.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`引入角点响应函数`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于判断$\\lambda_{1}$和$\\lambda_{2}$的大小是件非常困难的事，通常得设定阈值，阈值的选取决定了最终效果，而阈值选取是非常困难的。为了解决这个困难，引入了角点响应函数。\n",
    "![avatar](./img/Harris6.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. 简述Hough变换的基本原理(包括参数空间变换及参数空间划分网格统计)。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`Hough变换原理`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![avatar](./img/Hough1.png)\n",
    "![avatar](./img/Hough2.png)\n",
    "![avatar](./img/Hough3.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. 简述SIFT原理(重点是尺度空间和方向直方图原理)及ORB算子原理(重点是FAST和BRIEF)。 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### (1)SIFT原理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "SIFT的主要思路:首先构造图像的尺度空间表示，然后在尺度空间中搜索图像的极值点，由极值点再建立特征描述向量，最后用特征描述向量进行相似度匹配。SIFT特征还具有高度的可区分性，能够在一个具有大量特征数据的数据库中进行精确匹配。该算法具体可分为:<br>\n",
    "* 尺度空间极值检测\n",
    "* 关键点定位\n",
    "* 关键点特征描述"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`尺度空间极值检测`<br>\n",
    "\n",
    "1、高斯函数可以通过卷积计算来构造不同的尺度空间。此时，我们就把用来生成多尺度空间的高斯函数称作“高斯核”。\n",
    "![avatar](./img/尺度空间极值检测1.png)\n",
    "![avatar](./img/尺度空间极值检测2.png)\n",
    "![avatar](./img/尺度空间极值检测3.png)\n",
    "![avatar](./img/尺度空间极值检测4.png)\n",
    "![avatar](./img/尺度空间极值检测5.png)\n",
    "2、尺度空间理论:\n",
    "![avatar](./img/尺度空间极值检测6.png)\n",
    "3、高斯金字塔的构建\n",
    "![avatar](./img/尺度空间极值检测7.png)\n",
    "![avatar](./img/尺度空间极值检测8.png)\n",
    "![avatar](./img/尺度空间极值检测9.png)\n",
    "![avatar](./img/尺度空间极值检测10.png)\n",
    "4、为了高效地在尺度空间内检测出稳定的特征点，在SIFT算法中，使用尺度空间中差分高斯（Difference of Gaussian, DoG）极值作为判断依据。DoG算子定义为两个不同尺度的高斯核差分，它是归一化高斯拉普拉斯（Laplacian of Gaussian, LoG）算子的近似。\n",
    "![avatar](./img/尺度空间极值检测11.png)\n",
    "![avatar](./img/尺度空间极值检测12.png)\n",
    "![avatar](./img/尺度空间极值检测13.png)\n",
    "![avatar](./img/尺度空间极值检测14.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`方向直方图原理`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![avatar](./img/方向直方图.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### (2)ORB算子原理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "ORB算法算法分为两部分，分别是特征点提取和特征点描述。特征提取是由FAST算法发展而来，特征点描述是根据BRIEF特征描述算法改进的。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`oFAST特征提取(由FAST算法改进而来)`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![avatar](./img/oFAST特征提取1.png)\n",
    "![avatar](./img/oFAST特征提取2.png)\n",
    "![avatar](./img/oFAST特征提取3.png)\n",
    "![avatar](./img/oFAST特征提取4.png)\n",
    "![avatar](./img/oFAST特征提取5.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`rBRIEF特征描述(由BRIEF算法改进而来)`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![avatar](./img/rBRIEF特征描述1.png)\n",
    "在图像旋转大于30°后，BRIEF的匹配率快速降到0左右，因此我们需要对BRIEF进行改进。\n",
    "![avatar](./img/rBRIEF特征描述2.png)\n",
    "![avatar](./img/rBRIEF特征描述3.png)\n",
    "![avatar](./img/rBRIEF特征描述4.png)\n",
    "![avatar](./img/rBRIEF特征描述5.png)\n",
    "![avatar](./img/rBRIEF特征描述6.png)\n",
    "![avatar](./img/rBRIEF特征描述7.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
